package com.skyhigh.web.webservice.controllers;

import java.util.Calendar;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.support.SessionStatus;

import com.skyhigh.web.webservice.domain.Documento;
import com.skyhigh.web.webservice.services.ClienteService;
import com.skyhigh.web.webservice.services.DocumentoService;


@Controller
public class DocumentosController {

	@Autowired
	private DocumentoService service;	
	@Autowired
	private ClienteService clienteService;
	
	protected final Log logger = LogFactory.getLog(getClass());
	
	@RequestMapping(value="/buscarDocumentos.htm", method = RequestMethod.GET)
	public String desplegarFormularioBusqueda(ModelMap model){	
				
		int totalObjetos = service.obtenerCartidadObjetos(); 		
		
		model.addAttribute("totalObjetos", totalObjetos);		
		model.addAttribute("parametrosBusqueda", new Documento());		
		model.addAttribute("listaDocumentos", null);
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());		
		
		return "documentoBuscar";
	}
	
	@RequestMapping(value="/buscarDocumentos.htm", method = RequestMethod.POST)
	public String listarBusqueda(ModelMap model, 
			@ModelAttribute("idDocumento") Integer idDocumento, 
			@ModelAttribute("idCliente") Integer idCliente,			
			BindingResult result, SessionStatus status){
		
		String query = "FROM Documento WHERE idDocumento is not Null ";			
		if(idDocumento != 0)
			query = query + "AND idDocumento = " + idDocumento.toString();
		else
			query = query + "AND idDocumento LIKE '%' ";
		
		if(idCliente != 0)
			query = query + "AND idCliente = " + idCliente.toString();
		else
			query = query + "AND idCliente LIKE '%' ";
				

		int totalObjetos = service.obtenerCartidadObjetos(); 		
		
		model.addAttribute("totalObjetos", totalObjetos);		
		model.addAttribute("parametrosBusqueda", new Documento());
		model.addAttribute("listaDocumentos", service.obtenerObjetosByConsulta(query));		
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoBuscar";
	}
	
	
	@RequestMapping(value="/editarDocumento.htm", method = RequestMethod.GET)
	public String editarObjeto(ModelMap model, @ModelAttribute("idDocumento") Integer idDocumento){
		
		model.addAttribute("idDocumento", service.obtenerObjeto(idDocumento));	
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoEditar";
	}
	
	
	@RequestMapping(value="/verDocumento.htm", method = RequestMethod.GET)
	public String verObjeto(ModelMap model, 
			@ModelAttribute("idDocumento") Integer idDocumento){
		
		model.addAttribute("documento", service.obtenerObjeto(idDocumento));	
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoVer";
	}
	
	@RequestMapping(value="/guardarDocumentoExistente.htm", method = RequestMethod.POST)
	public String guardarObjetoExistente(ModelMap model, 
			@ModelAttribute("idDocumento") Integer idDocumento, 
			@ModelAttribute("idCliente") Integer idCliente,
			@ModelAttribute("idMercancia") Integer idMercancia,
			@ModelAttribute("rutaArchivo") String rutaArchivo, 			
			BindingResult result, SessionStatus status){
		
		
		Documento documento = service.obtenerObjeto(idDocumento);
		documento.setIdMercancia(idMercancia);
		documento.setCliente(clienteService.obtenerObjeto(idCliente));
		documento.setRutaArchivo(rutaArchivo);				
		service.actualizar(documento);
		
		int totalObjetos = service.obtenerCartidadObjetos(); 		
		
		model.addAttribute("totalObjetos", totalObjetos);		
		model.addAttribute("parametrosBusqueda", new Documento());
		model.addAttribute("listaDocumentos", null);	
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoBuscar";
	}
	
	@RequestMapping(value="/crearDocumento.htm", method = RequestMethod.GET)
	public String desplegarFormularioCrearObjeto(ModelMap model){	
		
		model.addAttribute("parametrosBusqueda", new Documento());		
		model.addAttribute("listaDocumentos", null);
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoNuevo";
	}
	
	@RequestMapping(value="/guardarDocumentoNuevo.htm", method = RequestMethod.POST)
	public String guardarObjetoNuevo(ModelMap model, 			
			@ModelAttribute("idMercancia") Integer idMercancia,
			@ModelAttribute("rutaArchivo") String rutaArchivo, 
			@ModelAttribute("idCliente") Integer idCliente,
			BindingResult result, SessionStatus status){
		
		
		Documento documento = new Documento();
		documento.setFechaIngreso(Calendar.getInstance().getTime());
		documento.setIdMercancia(idMercancia);		
		documento.setRutaArchivo(rutaArchivo);
		documento.setCliente(clienteService.obtenerObjeto(idCliente));			
		service.agregar(documento);
		
		int totalObjetos = service.obtenerCartidadObjetos(); 		
		
		model.addAttribute("totalObjetos", totalObjetos);		
		model.addAttribute("parametrosBusqueda", new Documento());
		model.addAttribute("listaDocumentos", null);	
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());		
		
		return "documentoBuscar";
	}
	
	@RequestMapping(value="/eliminarDocumento.htm", method = RequestMethod.GET)
	public String eliminarObjeto(ModelMap model, @ModelAttribute("idDocumento") Integer idDocumento){	
		
		service.eliminar(idDocumento);
		
		int totalObjetos = service.obtenerCartidadObjetos(); 			
		
		model.addAttribute("totalObjetos", totalObjetos);		
		model.addAttribute("parametrosBusqueda", new Documento());		
		model.addAttribute("listaDocumentos", null);
		model.addAttribute("listaClientes", clienteService.obtenerObjetos());
		
		return "documentoBuscar";
	}
   
}
